package com.hushi.impl;

import com.hushi.dao.CustomerDao;
import com.hushi.domain.Customer;
import com.hushi.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;

@Service(value = "customerService")
public class CustomerServiceImpl implements CustomerService {

//    基本数据类型注入
    @Value("Tang")
    private String name;
    @Value("${url}")
    private String url;

//    对象类型注入
    /**
     *1)自动根据类型进入注入，直接赋值给变量（无需提供构造方法或者setter方法）
     *2）如果Spring环境中没有任何一个CustomerDao的类型，那么会注入失败
     *3）如果Spring环境中出现了多个CustomerDao.的类型的对象，那么也会注入失败
     *  @Autowired自动根据类型注入
     *  @Qualifier指定注入对象名称
     *  两个搭配用
     */
    @Autowired
    @Qualifier(value = "customerDaoImpl2")
    private CustomerDao customerDao;

    /**
     * 1）注入的方式不一样：
     * @Autowired：只能根据类型注入，如果需要根据名称进行注入需要@Qualfier注解的配合。
     * 而@Resource既能够根据类型自动注入，也可以根据对象名称注入2）
     * 所属的标准不同
     * @Autowired来自于Spring框架
     * @Resource来自JavaEE标准
     *
     * @Resourcee注解比@Autowired更加标准！结论：推荐使用@Resource注解来注入对象！
     */
//    @Resource
//            多个实现对象要指定名称
    @Resource(name = "customerDaoImpl3")
    private CustomerDao customerDaoResource;

    public void save(){
        System.out.println(name);
        System.out.println(url);
        customerDao.save();
        customerDaoResource.save();
    }


}
